#include"comm.hpp"

extern Log log;

int main()
{
    //---------------可以用管道来帮助共享内存同步互斥，但是这样会降低效率，需要文件访问
    //创建
    int shmid=CreateShm();
    log(Debug,"create shm done");

    sleep(5);
    //挂接
    char* shmaddr=(char*)shmat(shmid,nullptr,0);//返回共享内存虚拟地址
    log(Debug,"attach shm done,shamaddr:0x%x",shmaddr);

    sleep(5);

    //一旦有人把数据写入到共享内存，其实我们立马能看到了
    //不需要经过系统调用，直接就能看到数据了
    //通信 ipc  接收消息
    while(true)
    {
        //---------------把管道中的字符读出来

        cout<<"client say@"<<shmaddr<<endl;//直接访问共享内存
        sleep(1);
    }



    sleep(5);

    //去挂接
    shmdt(shmaddr);
    log(Debug,"detach shm done,shamaddr:0x%x",shmaddr);

    sleep(5);

    //删除
    shmctl(shmid,IPC_RMID,nullptr);
    log(Debug,"destory shm done,shamaddr:0x%x",shmaddr);

    sleep(5);

    log(Debug,"process quit");

    return 0;
}